!--------------------------------
! Programa dedicado a calcular
! a evolucao da velocidade de um ciclista
! ideal, perfeitamente circular
! e sem atrito.
!
! Programa compilado e testado com:
! $ gfortran -o exer exer.f90
! $ ./exer
! 
! Forma de utilizacao auto-explicativa
! atravez de comentarios.
!
! _o_o_ oOo _o_o_ 28/09/2010


PROGRAM exerA
  IMPLICIT NONE
  INTEGER :: i, goal
  REAL (KIND=8) :: b0m0, theta, phi
  REAL (KIND=8) :: dt=0.01, g=9.8, v0=27.77777777777, w=39
  REAL (KIND=8) :: a1=0.0039, a2=0.0058, vd= 35, delta=5
  REAL (KIND=8) :: gamma2imb, vi, foo
  REAL (KIND=8), DIMENSION(3) :: v, s=[0,0,0],ang1=[40.,4.,2.5],ang2=[40.,10.,2.5]



  !!!!!!!!!!!!!!!!
  ! Recebendo os dados do usuario
  write(*,*) "Qual o valor b0/m0 (cerca de 5E-4)?"
  read(*,*) b0m0
  write(*,*) "Qual o theta0 (angulo inicial da bola com a vertical, em radianos)?"
  read(*,*) theta
  write(*,*) "Qual o valor de phi0 (angulo inicial da bola com o eixo x, em radianos)?"
  read(*,*) phi

  !!!!!!!!!!!!!!!!!!!!
  ! Calculando a velocidade inicial
  v = v0 * [sin(theta)*cos(phi), sin(theta)*sin(phi), cos(theta)]
  !!!!!!!!!!!!!!!!!!!!

  !!!!!!!!!!!!!!!!!!!!
  ! Fazendo os calculos do movimento
  open(11,file='chute_out.dat')
  DO WHILE ( (s(1)<40) .AND. (s(3) >= 0) .AND. v(1) > 0.01)
      s = s + v*dt
      vi = sqrt(sum(v**2))
      foo=(vi-vd)/delta
      gamma2imb = a1 + a2 / (1+exp(foo))

      v=v - ( v*gamma2imb*vi + [b0m0*w*v(2),-b0m0*w*v(1),g] ) * dt
      write(11,*) s
  END DO
  write(*,*) s
  !!!!!!!!!!!!!!!!!!!
  
  !!!!!!!!!!!!!!!!!!!
  ! Verificando se foi goal e printando na tela
  IF ( (s(1) > 40) .AND. (s(2) > 4) .AND. (s(2) < 10) .AND. (s(3) <2.5) ) THEN
      write(*,*) "SIM SIM SIM, sim foi goal"
  ELSE
      write(*,*) "NAO NAO NAO, nao foi goal"
  END IF
  



end PROGRAM